home *** CD-ROM | disk | FTP | other *** search
- * down.s
- * 下スクロール / 最高速 = 5
- * by Mitsuky
-
-
- SPEED_MAX equ 5
-
- .offset 8 * 引き数
- _source_ptr: .ds.l 1
- _dest_ptr: .ds.l 1
- _speed: .ds.l 1
- _vdisp: .ds.l 1
-
-
-
- CRTC_R12 equ $e8_0018 * スクロールX
- CRTC_R14 equ $e8_001c
- CRTC_R16 equ $e8_0020
- CRTC_R18 equ $e8_0024
-
-
- .text
- .even
-
- .dc.b 'WL10',$0d,$0a
- .dc.b '下スクロール / 最高速 = 5',$0d,$0a
- .dc.b ' by Mitsuky',$0d,$0a
- .dc.b $1a
- .even
-
- down:
- link a6,#0
- movem.l d1-d7/a0-a5,-(sp)
-
- move.l _speed(a6),d0 * d0.w =
- bmi down_ask_speed
- cmpi.l #SPEED_MAX,d0
- bhi down_err
-
- tst.l _vdisp(a6)
- bmi down_ask_vdisp
-
-
-
- moveq.l #1,d5
- lsl.w d0,d5
- move.l #512,d7
- add.w d5,d7 * d7.l = スクロール座標
- subq.w #1,d5 * d5.w = V-SYNC 当たりのループ回数-1
-
- move.w #512,d6
- lsr.w d0,d6
- subq.w #1,d6 * d6.w = ループ回数-1
-
- movea.l _source_ptr(a6),a3 * a3.l = 転送元アドレス
- movea.l _dest_ptr(a6),a4 * a4.l = 転送先アドレス
-
-
- loop:
- bsr vdisp
-
- move.l d7,CRTC_R12
- move.l d7,CRTC_R14
- move.l d7,CRTC_R16
- move.l d7,CRTC_R18
-
- move.w d5,d4 * d5.w =
- loop_y2:
- .rept 32
- movem.l (a3)+,d0-d3/a0-a2/a5
- movem.l d0-d3/a0-a2/a5,(a4)
- lea.l 32(a4),a4
- .endm
-
- addq.w #1,d7
- dbra d4,loop_y2
- dbra d6,loop
-
-
-
- down_rts:
- moveq.l #0,d0
- down_rts_2:
- movem.l (sp)+,d1-d7/a0-a5
- unlk a6
- rts
-
-
- **** ****
- vdisp:
- movem.l a0,-(sp)
- move.l _vdisp(a6),a0
- jsr (a0)
- movem.l (sp)+,a0
- rts
-
-
- **** ****
- down_err:
- moveq.l #-1,d0
- bra down_rts_2
-
-
- **** ****
- down_ask_speed:
- moveq.l #SPEED_MAX,d0
- bra down_rts_2
-
-
- **** ****
- down_ask_vdisp:
- move.l _speed(a6),d0
- lea.l ask_vdisp_table(pc),a0
- add.w d0,d0
- move.w (a0,d0.w),d0
- bra down_rts_2
-
- ask_vdisp_table:
- .dc.w 512,256,128,64,32,16